home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Utilities / AmiMirror / Developer / prefs / source / MainWin.h < prev    next >
Encoding:
Text File  |  1999-06-30  |  47.9 KB  |  1,057 lines

  1.  
  2. ///­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯ <
  3. ///
  4. ///ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Object: MainWin ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥ <
  5. ///
  6. ///¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´ <
  7. ///
  8. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  9. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥   MainWinStoReq()   ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  10. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  11. ¢                                 Storage requester.                        ¢
  12. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  13. */
  14. ULONG MainWinStoReq (struct IClass *cl, Object *obj, Msg msg)
  15. {
  16.   struct rtFileRequester *req;
  17.   UBYTE fname[FMSIZE];
  18.   STRPTR str;
  19.   struct MWData *data = INST_DATA(cl, obj);
  20.  
  21.   if (req = rtAllocRequestA (RT_FILEREQ, NULL))
  22.     {
  23.       *fname = '\0';
  24.       if ((! (str = getstr (data->Storage))) || (! (*str)))
  25.         str = DEF_SYS_DIR;
  26.       rtChangeReqAttr (req, RTFI_Dir, str, TAG_DONE);
  27.       if (rtFileRequest (req, fname,
  28.                          GETMES(REQ_SELECT_STORAGE),
  29.                          RT_Underscore, '_',
  30.                          RTFI_OkText, GETMES(REQ_ACCEPT_BUT),
  31.                          RTFI_Flags, FREQF_NOFILES,
  32.                          TAG_MORE, hooktags))
  33.         {
  34.           set (data->Storage, MUIA_String_Contents, req->Dir);
  35.           strcpy (fname, req->Dir);
  36.         }
  37.       rtFreeRequest (req);
  38.     }
  39.   else
  40.     MakeRequest (REQ_TITLE_ERROR, OUT_MEM, CANCEL_BUT, NULL);
  41.   return (0L);
  42. }
  43. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  44. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥   MainWinPatReq()   ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  45. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  46. ¢                                 Pattern requester.                        ¢
  47. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  48. */
  49. ULONG MainWinPatReq (struct IClass *cl, Object *obj, Msg msg)
  50. {
  51.   struct rtFileRequester *req;
  52.   UBYTE fname[FMSIZE];
  53.   UBYTE pat[FMSIZE];
  54.   ULONG fa;
  55.   STRPTR str;
  56.   struct MWData *data = INST_DATA(cl, obj);
  57.  
  58.   if (req = rtAllocRequestA (RT_FILEREQ, NULL))
  59.     {
  60.       *fname = '\0';
  61.       if ((str = getstr (data->Pattern)) && (*str))
  62.         {
  63.           fa = getfa (str);
  64.           if (fa == -1)
  65.             {
  66.               stcgfn (fname, str);
  67.               stcgfp (pat, str);
  68.               str = pat;
  69.             }
  70.           else if (fa == 0)
  71.             {
  72.               stcgfp (pat, str);
  73.               str = pat;
  74.             }
  75.         }
  76.       else
  77.         str = DEF_SYS_DIR;
  78.       rtChangeReqAttr (req, RTFI_Dir, str, TAG_DONE);
  79.       if (rtFileRequest (req, fname,
  80.                          GETMES(REQ_SELECT_PATTERN),
  81.                          RT_Underscore, '_',
  82.                          RTFI_OkText, GETMES(REQ_ACCEPT_BUT),
  83.                          RTFI_AllowEmpty, TRUE,
  84.                          TAG_MORE, hooktags))
  85.         {
  86.           if (! *fname)
  87.             strcpy (pat, req->Dir);
  88.           else
  89.             strmfp (pat, req->Dir, fname);
  90.           set (data->Pattern, MUIA_String_Contents, pat);
  91.         }
  92.       rtFreeRequest (req);
  93.     }
  94.   else
  95.     MakeRequest (REQ_TITLE_ERROR, OUT_MEM, CANCEL_BUT, NULL);
  96.   return (0L);
  97. }
  98. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  99. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥   MainWinNewEnv()   ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  100. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  101. ¢                           Usage/save of new enveropment.                  ¢
  102. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  103. */
  104. ULONG MainWinNewEnv (struct IClass *cl, Object *obj, Tie *tie)
  105. {
  106.   STRPTR pat, sto;
  107.   struct MsgPort *comport;
  108.   struct Message *msg;
  109.   struct MWData  *data = INST_DATA(cl, obj);
  110.  
  111.   if (data->PNode)
  112.     {
  113.       pat = getstr (data->Pattern);
  114.       sto = getstr (data->Storage);
  115.       if ((pat[0] == '\0') || (sto[0] == '\0'))
  116.         {
  117.           MakeRequest (REQ_TITLE_ERROR, PAT_STORAGE_ERROR, CANCEL_BUT, NULL);
  118.           return (0L);
  119.         }
  120.     }
  121.   if (tie->ID1)
  122.     SaveSets (DEF_ENVARC_FILE, data->PatList);
  123.   SaveSets (DEF_ENV_FILE, data->PatList);
  124.   if (comport = FindPort (COM_PORT_NAME))
  125.     {
  126.       if (msg = AllocVec (sizeof(struct Message), MEMF_PUBLIC | MEMF_CLEAR))
  127.         {
  128.           if (msg->mn_ReplyPort = CreatePort (REPLY_PORT_NAME, 0))
  129.             {
  130.               msg->mn_Node.ln_Type = NT_MESSAGE;
  131.               msg->mn_Node.ln_Name = REPLY_PORT_NAME;
  132.               msg->mn_Length = sizeof(struct Message);
  133.               PutMsg (comport, msg);
  134.               WaitPort (msg->mn_ReplyPort);
  135.               while (GetMsg (msg->mn_ReplyPort));
  136.               DeletePort (msg->mn_ReplyPort);
  137.             }
  138.           else
  139.             MakeRequest (REQ_TITLE_ERROR, CANT_CREATE_PORT, EXIT_BUT, NULL);
  140.           FreeVec (msg);
  141.         }
  142.       else
  143.         MakeRequest (REQ_TITLE_ERROR, OUT_MEM, EXIT_BUT, NULL);
  144.     }
  145.   else
  146.     MakeRequest (REQ_TITLE_ERROR, NO_COMMODITY, EXIT_BUT, NULL);
  147.   DoMethod (AmiMirrorPrefs, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
  148.   return (0L);
  149. }
  150. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  151. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥  MainWinMenuSave()  ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  152. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  153. ¢                              Save settings from menu.                     ¢
  154. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  155. */
  156. ULONG MainWinMenuSave (struct IClass *cl, Object *obj, Tie *tie)
  157. {
  158.   struct rtFileRequester *req;
  159.   STRPTR pat, sto;
  160.   BOOL reqOK = TRUE;
  161.   struct MWData *data = INST_DATA(cl, obj);
  162.  
  163.   if (data->PNode)
  164.     {
  165.       pat = getstr (data->Pattern);
  166.       sto = getstr (data->Storage);
  167.       if ((pat[0] == '\0') || (sto[0] == '\0'))
  168.         {
  169.           MakeRequest (REQ_TITLE_ERROR, PAT_STORAGE_ERROR, CANCEL_BUT, NULL);
  170.           return (0L);
  171.         }
  172.     }
  173.   if (tie->ID1 == SAVE_SETS_REQ)
  174.     {
  175.       if (req = rtAllocRequestA (RT_FILEREQ, NULL))
  176.         {
  177.           rtChangeReqAttr (req, RTFI_Dir, data->CurDir, TAG_DONE);
  178.           if (rtFileRequest (req, data->CurFile,
  179.                              GETMES(REQ_SELECT_SAVE_FILE),
  180.                              RT_Underscore, '_',
  181.                              RTFI_OkText, GETMES(REQ_SAVE_BUT),
  182.                              RTFI_Flags, FREQF_SAVE,
  183.                              TAG_MORE, hooktags))
  184.             strmfp (data->setsfile, strcpy (data->CurDir, req->Dir), data->CurFile);
  185.           else
  186.             reqOK = FALSE;
  187.           rtFreeRequest (req);
  188.         }
  189.       else
  190.         {
  191.           MakeRequest (REQ_TITLE_ERROR, OUT_MEM, CANCEL_BUT, NULL);
  192.           reqOK = FALSE;
  193.         }
  194.     }
  195.   else if (tie->ID1 == SAVE_SETS_DEF)
  196.     strmfp (data->setsfile, DEF_ENVARC_DIR, DEF_SETS_FILE);
  197.   if (reqOK)
  198.     SaveSets (data->setsfile, data->PatList);
  199.   return (0L);
  200. }
  201. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  202. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥  MainWinMenuOpen()  ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  203. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  204. ¢                              Load settings from menu.                     ¢
  205. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  206. */
  207. ULONG MainWinMenuOpen (struct IClass *cl, Object *obj, Tie *tie)
  208. {
  209.   struct List *BakList;
  210.   struct rtFileRequester *req;
  211.   BOOL reqOK = TRUE;
  212.   struct MWData *data = INST_DATA(cl, obj);
  213.  
  214.   if (tie->ID1)
  215.     {
  216.       if (req = rtAllocRequestA (RT_FILEREQ, NULL))
  217.         {
  218.           rtChangeReqAttr (req, RTFI_Dir, data->CurDir, TAG_DONE);
  219.           if (rtFileRequest (req, data->CurFile,
  220.                              GETMES(REQ_SELECT_OPEN_FILE),
  221.                              RT_Underscore, '_',
  222.                              RTFI_OkText, GETMES(REQ_LOAD_BUT),
  223.                              TAG_MORE, hooktags))
  224.             strmfp (data->setsfile, strcpy (data->CurDir, req->Dir), data->CurFile);
  225.           else
  226.             reqOK = FALSE;
  227.           rtFreeRequest (req);
  228.         }
  229.       else
  230.         {
  231.           MakeRequest (REQ_TITLE_ERROR, OUT_MEM, CANCEL_BUT, NULL);
  232.           reqOK = FALSE;
  233.         }
  234.     }
  235.   else
  236.     strmfp (data->setsfile, DEF_ENVARC_DIR, DEF_SETS_FILE);
  237.   if (reqOK)
  238.     {
  239.       if (BakList = AllocVec (sizeof(struct List), MEMF_PUBLIC))
  240.         {
  241.           NewList (BakList);
  242.           if (LoadSets (data->setsfile, BakList))
  243.             {
  244.               FreePatList (PatList);
  245.               PatList = BakList;
  246.               DoMethod (obj, MUIM_MW_Open, FALSE);
  247.             }
  248.           else
  249.             FreePatList (BakList);
  250.         }
  251.       else
  252.         MakeRequest (REQ_TITLE_ERROR, OUT_MEM, CANCEL_BUT, NULL);
  253.     }
  254.   return (0L);
  255. }
  256. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  257. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥    MainWinPage()    ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  258. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  259. ¢                            Control of main window pages.                  ¢
  260. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  261. */
  262. ULONG MainWinPage (struct IClass *cl, Object *obj, Tie *tie)
  263. {
  264.   struct MWData *data = INST_DATA(cl, obj);
  265.  
  266.   set (data->Page,    MUIA_Group_ActivePage, tie->ID1);
  267.   set (data->PatList, MUIA_List_Active,      MUIV_List_Active_Off);
  268.   return (0L);
  269. }
  270.  
  271. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  272. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥   MainWinListEx()   ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  273. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  274. ¢                                Move pattern in list.                      ¢
  275. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  276. */
  277. ULONG MainWinListEx (struct IClass *cl, Object *obj, Tie *tie)
  278. {
  279.   struct MWData *data = INST_DATA(cl, obj);
  280.  
  281.   if (tie->ID1)
  282.     {
  283.       DoMethod (data->PatList, MUIM_List_Exchange, MUIV_List_Exchange_Active, MUIV_List_Exchange_Previous);
  284.       set      (data->PatList, MUIA_List_Active,   MUIV_List_Active_Up);
  285.     }
  286.   else
  287.     {
  288.       DoMethod (data->PatList, MUIM_List_Exchange, MUIV_List_Exchange_Active, MUIV_List_Exchange_Next);
  289.       set      (data->PatList, MUIA_List_Active,   MUIV_List_Active_Down);
  290.     }
  291.   return (0L);
  292. }
  293. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  294. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥   MainWinAccept()   ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  295. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  296. ¢                              Accept data from editor.                     ¢
  297. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  298. */
  299. ULONG MainWinAccept (struct IClass *cl, Object *obj, Msg msg)
  300. {
  301.   STRPTR str, errname, pat, sto;
  302.   struct DeviceList *dl;
  303.   BPTR lock;
  304.   UBYTE dir[FMSIZE];
  305.   UBYTE name[FMSIZE];
  306.   struct MWData *data = INST_DATA(cl, obj);
  307.  
  308.   if (data->PNode)
  309.     {
  310.       pat = getstr (data->Pattern);
  311.       sto = getstr (data->Storage);
  312.       if ((pat[0] == '\0') || (sto[0] == '\0'))
  313.         {
  314.           MakeRequest (REQ_TITLE_ERROR, PAT_STORAGE_ERROR, CANCEL_BUT, NULL);
  315.           set (MainWin, MUIA_Window_ActiveObject, *pat ? data->Storage : data->Pattern);
  316.           return (0L);
  317.         }
  318.       strcpy (dir, pat);
  319.       if (str = strchr (dir, ':'))
  320.         {
  321.           *str = '\0';
  322.           if (dl = getasn (dir))
  323.             {
  324.               switch (dl->dl_Type)
  325.                 {
  326.                   case DLT_DEVICE:
  327.                     errname = GETMES(DEVICE_STR);
  328.                     break;
  329.                   case DLT_VOLUME:
  330.                     errname = NULL;
  331.                     break;
  332.                 default:
  333.                     errname = GETMES(ASSIGN_STR);
  334.                     break;
  335.                 }
  336.               if (errname)
  337.                 {
  338.                   str[0] = ':'; str[1] = '\0';
  339.                   *name = '\0';
  340.                   if (lock = Lock (dir, ACCESS_READ))
  341.                     {
  342.                       NameFromLock (lock, name, FMSIZE-1);
  343.                       UnLock (lock);
  344.                     }
  345.                   if (*name)
  346.                     MakeRequest (REQ_TITLE_ERROR, WRONG_DISKTYPE1_FORMAT, OK_BUT, dir, errname, name);
  347.                   else
  348.                     MakeRequest (REQ_TITLE_ERROR, WRONG_DISKTYPE2_FORMAT, CANCEL_BUT, dir, errname);
  349.                   set (MainWin, MUIA_Window_ActiveObject, data->Pattern);
  350.                   return (0L);
  351.                 }
  352.             }
  353.           else
  354.             {
  355.               MakeRequest (REQ_TITLE_ERROR, WRONG_DISKTYPE3_FORMAT, CANCEL_BUT, dir);
  356.               set (MainWin, MUIA_Window_ActiveObject, data->Pattern);
  357.               return (0L);
  358.             }
  359.         }
  360.       strcpy (data->PNode->pn_Pattern, pat);
  361.       strcpy (data->PNode->pn_Storage, sto);
  362.       data->PNode->pn_Function      = xget (data->Function,  MUIA_Cycle_Active);
  363.       data->PNode->pn_PatternMode   = xget (data->PatMode,   MUIA_Cycle_Active);
  364.       data->PNode->pn_StorageMode   = xget (data->StoMode,   MUIA_Cycle_Active);
  365.       data->PNode->pn_StorageMethod = xget (data->StoMethod, MUIA_Cycle_Active);
  366.       data->PNode->pn_PerformCheck  = xget (data->PCheck,    MUIA_Cycle_Active);
  367.       if (data->PNode->pn_UseXPK = xget (data->XpkUse, MUIA_Selected))
  368.         {
  369.           strcpy (data->PNode->pn_XPKName,  data->xpkname);
  370.           strcpy (data->PNode->pn_Password, data->password);
  371.           data->PNode->pn_XPKMode = data->step;
  372.         }
  373.       else
  374.         {
  375.           strcpy (data->PNode->pn_XPKName,  empty);
  376.           strcpy (data->PNode->pn_Password, empty);
  377.           data->PNode->pn_XPKMode = 0;
  378.         }
  379.       DoMethod (data->PatList, MUIM_List_Redraw, MUIV_List_Redraw_Active);
  380.     }
  381.   return (0L);
  382. }
  383. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  384. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥ MainWinDelPattern() ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  385. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  386. ¢                              Delete pattern from list.                    ¢
  387. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  388. */
  389. ULONG MainWinDelPattern (struct IClass *cl, Object *obj, Msg msg)
  390. {
  391.   struct MWData *data = INST_DATA(cl, obj);
  392.  
  393.   Remove ((struct Node *)(data->PNode));
  394.   FreeVec (data->PNode);
  395.   data->PNode = NULL;
  396.   DoMethod (data->PatList, MUIM_List_Remove, MUIV_List_Remove_Active);
  397.   return (0L);
  398. }
  399. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  400. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥ MainWinNewPattern() ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  401. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  402. ¢                              Add new pattern to list.                     ¢
  403. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  404. */
  405. ULONG MainWinNewPattern (struct IClass *cl, Object *obj, Msg msg)
  406. {
  407.   struct MWData *data = INST_DATA(cl, obj);
  408.  
  409.   if (data->PNode = AllocVec (sizeof(struct PatternNode), MEMF_PUBLIC | MEMF_CLEAR))
  410.     {
  411.       strcpy (data->PNode->pn_Pattern, GETMES(NEW_PATTERN_NAME));
  412.       data->PNode->pn_Node.ln_Name = data->PNode->pn_Pattern;
  413.       AddTail (PatList, (struct Node *)(data->PNode));
  414.       DoMethod (data->PatList, MUIM_List_InsertSingle, data->PNode->pn_Node.ln_Name, MUIV_List_Insert_Bottom);
  415.       set (data->PatList, MUIA_List_Active, MUIV_List_Active_Bottom);
  416.     }
  417.   else
  418.     MakeRequest (REQ_TITLE_ERROR, OUT_MEM, CANCEL_BUT, NULL);
  419.   return (0L);
  420. }
  421. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  422. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥ MainWinListSelect() ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  423. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  424. ¢                          USer selects pattern in the list.                ¢
  425. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  426. */
  427. ULONG MainWinListSelect (struct IClass *cl, Object *obj, Msg msg)
  428. {
  429.   STRPTR str;
  430.   struct Node *node;
  431.   struct MWData *data = INST_DATA(cl, obj);
  432.  
  433.   data->PNode = NULL;
  434.   DoMethod (data->PatList, MUIM_List_GetEntry, MUIV_List_GetEntry_Active, &str);
  435.   if (str)
  436.     {
  437.       node = PatList->lh_Head;
  438.       while (node->ln_Succ)
  439.         {
  440.           if (((struct PatternNode *)node)->pn_Node.ln_Name == str)
  441.             {
  442.               data->PNode = (struct PatternNode *)node;
  443.               break;
  444.             }
  445.           node = node->ln_Succ;
  446.         }
  447.     }
  448.   if (data->PNode)
  449.     {
  450.       set (data->Editor,    MUIA_Disabled,        FALSE);
  451.       set (data->Page,      MUIA_Group_ActivePage,EDITOR_PAGE);
  452.       set (data->Pattern,   MUIA_String_Contents, data->PNode->pn_Pattern);
  453.       set (data->Storage,   MUIA_String_Contents, data->PNode->pn_Storage);
  454.       set (data->Function,  MUIA_Cycle_Active,    data->PNode->pn_Function);
  455.       set (data->PatMode,   MUIA_Cycle_Active,    data->PNode->pn_PatternMode);
  456.       set (data->StoMode,   MUIA_Cycle_Active,    data->PNode->pn_StorageMode);
  457.       set (data->StoMethod, MUIA_Cycle_Active,    data->PNode->pn_StorageMethod);
  458.       set (data->PCheck,    MUIA_Cycle_Active,    data->PNode->pn_PerformCheck);
  459.       set (data->XpkName,   MUIA_Text_Contents,   strcpy (data->xpkname, data->PNode->pn_XPKName));
  460.       data->step = data->PNode->pn_XPKMode;
  461.       strcpy (data->password, data->PNode->pn_Password);
  462.       set (data->XpkUse, MUIA_Selected, data->PNode->pn_UseXPK);
  463.       set (obj, MUIA_Window_ActiveObject, data->Pattern);
  464.     }
  465.   else
  466.     {
  467.       data->PNode = NULL;
  468.       set (obj, MUIA_Window_ActiveObject, MUIV_Window_ActiveObject_None);
  469.       set (data->Editor, MUIA_Disabled, TRUE);
  470.     }
  471.   return (0L);
  472. }
  473. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  474. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥   MainWinXpkUse()   ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  475. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  476. ¢                         Control of check mark "usage XPK".                ¢
  477. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  478. */
  479. ULONG MainWinXpkUse (struct IClass *cl, Object *obj, Tie *tie)
  480. {
  481.   STRPTR txt;
  482.   struct MWData *data = INST_DATA(cl, obj);
  483.  
  484.  
  485.   if (! (tie->ID1))
  486.     set (data->XpkName, MUIA_Text_Contents, empty);
  487.   else
  488.     {
  489.       txt = (STRPTR)xget (data->XpkName, MUIA_Text_Contents);
  490.       if (! txt[0])
  491.         DoMethod (obj, MUIM_MW_XpkOpen);
  492.     }
  493.   return (0L);
  494. }
  495. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  496. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥  MainWinXpkClose()  ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  497. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  498. ¢                               XPK window was closed.                      ¢
  499. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  500. */
  501. ULONG MainWinXpkClose (struct IClass *cl, Object *obj, Tie *tie)
  502. {
  503.   STRPTR txt;
  504.   struct MWData *data = INST_DATA(cl, obj);
  505.  
  506.   if (tie->ID1)
  507.     {
  508.       set (data->XpkName, MUIA_Text_Contents, strcpy (data->xpkname, (STRPTR)(tie->ID1)));
  509.       data->step = (UWORD)(tie->ID2);
  510.       strcpy (data->password, (STRPTR)(tie->ID3));
  511.       set (data->XpkUse, MUIA_Selected, TRUE);
  512.     }
  513.   else
  514.     {
  515.       txt = (STRPTR)xget (data->XpkName, MUIA_Text_Contents);
  516.       if (! txt[0])
  517.         set (data->XpkUse, MUIA_Selected, FALSE);
  518.     }
  519.   set (obj, MUIA_Window_Sleep, FALSE);
  520.   return (0L);
  521. }
  522. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  523. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥  MainWinXpkOpen()   ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  524. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  525. ¢                           User wishs to open XPK window.                  ¢
  526. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  527. */
  528. ULONG MainWinXpkOpen (struct IClass *cl, Object *obj, Msg msg)
  529. {
  530.   struct MWData *data = INST_DATA(cl, obj);
  531.  
  532.   set (obj, MUIA_Window_Sleep, TRUE);
  533.   DoMethod (XpkWin, MUIM_XW_Open, data->xpkname, data->step, data->password);
  534.   return (0L);
  535. }
  536. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  537. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥    MainWinOpen()    ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  538. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  539. ¢                      Main window is opened/full redrawed here.            ¢
  540. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  541. */
  542. ULONG MainWinOpen (struct IClass *cl, Object *obj, Tie *tie)
  543. {
  544.   struct Node *node;
  545.   struct MWData *data = INST_DATA(cl, obj);
  546.  
  547.   set (data->PatList, MUIA_List_Quiet, TRUE);
  548.   DoMethod (data->PatList, MUIM_List_Clear);
  549.   node = PatList->lh_Head;
  550.  
  551.   while (node->ln_Succ)
  552.     {
  553.       DoMethod (data->PatList, MUIM_List_InsertSingle, node->ln_Name, MUIV_List_Insert_Bottom);
  554.       node = node->ln_Succ;
  555.     }
  556.   set (data->Editor,  MUIA_Disabled,   TRUE);
  557.   set (data->PatList, MUIA_List_Quiet, FALSE);
  558.   if (tie->ID1)
  559.     {
  560.       set (obj, MUIA_Window_Open, TRUE);
  561.       if (xget (obj, MUIA_Window_Open))
  562.         {
  563.           hooktags[0].ti_Data = xget (obj, MUIA_Window_Window);
  564.           ReqHook.h_Entry = (HOOKFUNC)IntuiRefresh;
  565.           hooktags[2].ti_Data = (ULONG)(&ReqHook);
  566.         }
  567.       else
  568.         {
  569.           DoMethod (AmiMirrorPrefs, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
  570.           return (0L);
  571.         }
  572.     }
  573.   set (obj, MUIA_Window_ActiveObject, data->PatLView);
  574.   return (0L);
  575. }
  576.  
  577. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  578. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥    MainWinClose()   ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  579. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  580. ¢                          User wishs to exit from program.                 ¢
  581. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  582. */
  583. ULONG MainWinClose (struct IClass *cl, Object *obj, Msg msg)
  584. {
  585.   DoMethod (AmiMirrorPrefs, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
  586.   return (0L);
  587. }
  588.  
  589. /*                           ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  590. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥     MainWinNew()    ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  591. ¢                            ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                        ¢
  592. ¢                     Main window initialization due OM_NEW.                ¢
  593. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  594. */
  595. ULONG MainWinNew (struct IClass *cl, Object *obj, struct opSet *msg)
  596. {
  597.   struct MWData *data;
  598.   ULONG count;
  599.   STRPTR language, translator;
  600.   UBYTE lang[256];
  601.   Object *Menu, *Page, *ProgInfo, *PatLView, *PatList, *Editor;
  602.   Object *AddBut, *DelBut, *UpBut, *DownBut;
  603.   Object *Pattern, *Storage, *PatPop, *StoPop;
  604.   Object *Function, *PatMode, *StoMode, *StoMethod, *PCheck;
  605.   Object *XpkPop, *XpkName, *XpkUse;
  606.   Object *Work1But, *Work2But, *ProgBut, *SystemBut, *Quit1But, *Quit2But;
  607.   Object *AcceptBut, *CancelBut, *SaveBut, *UseBut, *ExitBut;
  608.  
  609. // program menu initialization
  610.  
  611.   for (count = 0L; MainWinMenu[count].nm_Type != NM_END; count++)
  612.     {
  613.       if (MainWinMenu[count].nm_UserData)
  614.         {
  615.           MainWinMenu[count].nm_Label = GETMES((ULONG)(MainWinMenu[count].nm_UserData));
  616.           if (MainWinMenu[count].nm_CommKey)
  617.             MainWinMenu[count].nm_CommKey = GETMES((ULONG)(MainWinMenu[count].nm_UserData) + 1);
  618.         }
  619.     }
  620. // language/translator definition
  621.   if (catalog)
  622.     {
  623.       language = catalog->cat_Language;
  624.       translator = GETMES(TRANSLATORS_STR);
  625.     }
  626.   else
  627.     {
  628.       language = GETMES(BUILTIN_LANGUAGE);
  629.       translator = GETMES(PROG_AUTHOR);
  630.     }
  631.   strcpy (lang, language);
  632.   if (LocaleBase)
  633.     {
  634.       struct Locale *locale;
  635.       if (locale = OpenLocale (NULL))
  636.         {
  637.           *lang = (UBYTE)ConvToUpper (locale, lang[0]);
  638.           CloseLocale (locale);
  639.         }
  640.     }
  641.  
  642. // object creation
  643.   obj = (Object *)DoSuperNew (cl,obj,
  644.         MUIA_Window_Title, GETMES(MAINWIN_TITLE),
  645.         MUIA_Window_ID, MAKE_ID('M','A','I','N'),
  646.         MUIA_Window_ScreenTitle, GETMES(PROG_COPYRIGHT),
  647.         MUIA_Window_Menustrip, Menu = MUI_MakeObject (MUIO_MenustripNM, MainWinMenu, 0),
  648.         WindowContents, VGroup,
  649.               Child, Page = HGroup,
  650.                      MUIA_Group_PageMode, TRUE,
  651.                      Child, VGroup,
  652.                             Child, ProgInfo = ScrollgroupObject,
  653.                                    GroupFrameT(GETMES(PROG_INFO_TITLE)),
  654.                                    MUIA_Scrollgroup_Contents, VGroupV,
  655.                                         StringFrame,
  656.                                         MUIA_Background, MUII_RegisterBack,
  657.                                         Child, CText(empty),
  658.                                         Child, CHText(GETMES(WELCOME_STR)),
  659.                                         Child, HGroup,
  660.                                                Child, HSpace(0),
  661.                                                Child, FrmPic(AMIR_W, AMIR_H, amir_body, TRUE),
  662.                                                Child, HSpace(0),
  663.                                                End,
  664.                                         Child, CBText(GETMES(PROG_DESC)),
  665.                                         Child, HGroup,
  666.                                                Child, HSpace(0),
  667.                                                Child, Label(GETMES(VERSION_STR)),
  668.                                                Child, LLabel(GETMES(PROG_VERSION)+20),
  669.                                                Child, HSpace(0),
  670.                                                End,
  671.                                         Child, VSpace(0),
  672.                                         Child, CText(empty),
  673.                                         Child, CText(GETMES(SOFT_CREATED_STR)),
  674.                                         Child, HGroup,
  675.                                                Child, HSpace(0),
  676.                                                Child, PicPic(BSS_W, BSS_H, bss_body, TRUE),
  677.                                                Child, HSpace(0),
  678.                                                End,
  679.                                         Child, CText(GETMES(PROG_COPYLEFT)),
  680.                                         Child, CText(empty),
  681.                                         Child, CText(GETMES(HEADQUARTERS_STR)),
  682.                                         Child, CText(empty),
  683.                                         Child, HGroup,
  684.                                                Child, HSpace(0),
  685.                                                Child, ButPic(GLOBE_W, GLOBE_H, globe_body, FALSE),
  686.                                                Child, Text(GETMES(NET_ADDRESS)),
  687.                                                Child, HSpace(0),
  688.                                                Child, ButPic(MAIL_W, MAIL_H, mail_body, TRUE),
  689.                                                Child, Text(GETMES(SNAPMAIL_ADDRESS)),
  690.                                                Child, HSpace(0),
  691.                                                End,
  692.                                         Child, VSpace(0),
  693.                                         Child, CText(empty),
  694.                                         Child, HGroup,
  695.                                                Child, HSpace(0),
  696.                                                Child, ButPic(ATO_W, ATO_H, ato_body, TRUE),
  697.                                                Child, HSpace(0),
  698.                                                End,
  699.                                         Child, CText(GETMES(ATO_STR)),
  700.                                         Child, CText(empty),
  701.                                         Child, HGroup,
  702.                                                Child, HSpace(0),
  703.                                                Child, Label(GETMES(LANGUAGE_STR)),
  704.                                                Child, LLabel(lang),
  705.                                                Child, HSpace(0),
  706.                                                End,
  707.                                         Child, HGroup,
  708.                                                Child, HSpace(0),
  709.                                                Child, Label(GETMES(TRANSLATION_STR)),
  710.                                                Child, LLabel(translator),
  711.                                                Child, HSpace(0),
  712.                                                End,
  713.                                         Child, VSpace(0),
  714.                                         Child, CText(empty),
  715.                                         Child, HGroup,
  716.                                                Child, HSpace(0),
  717.                                                Child, ButPic(MUI_W, MUI_H, mui_body, FALSE),
  718.                                                Child, HSpace(0),
  719.                                                End,
  720.                                         Child, CBText(GETMES(MUI_COPYRIGHT)),
  721.                                         Child, CText(empty),
  722.                                         End,
  723.                                    End,
  724.                             Child, HGroup, MUIA_Group_SameSize, TRUE,
  725.                                    Child, Work1But  = KeyButton (GETMES(WORK_BUT),   GETKEY(WORK_KEY)),
  726.                                    Child, SystemBut = KeyButton (GETMES(SYSTEM_BUT), GETKEY(SYSTEM_KEY)),
  727.                                    Child, Quit1But  = KeyButton (GETMES(EXIT_BUT),   GETKEY(EXIT_KEY)),
  728.                                    End,
  729.                             End,
  730.                      Child, VGroup,
  731.                             Child, ColGroup(2),
  732.                                    GroupFrameT(GETMES(SYSTEM_INFO_TITLE)),
  733.                                    Child, VSpace(0), Child, VSpace(0),
  734.                                    Child, Label1(GETMES(SYSTEM_ISTR)),
  735.                                    Child, SText(IdHardware (IDHW_SYSTEM, NULL)),
  736.                                    Child, Label1(GETMES(CPU_ISTR)),
  737.                                    Child, SText(IdHardware (IDHW_CPU, NULL)),
  738.                                    Child, Label1(GETMES(FPU_ISTR)),
  739.                                    Child, SText(IdHardware (IDHW_FPU, NULL)),
  740.                                    Child, Label1(GETMES(MMU_ISTR)),
  741.                                    Child, SText(IdHardware (IDHW_MMU, NULL)),
  742.                                    Child, Label1(GETMES(OS_ISTR)),
  743.                                    Child, SText(IdHardware (IDHW_OSVER, NULL)),
  744.                                    Child, Label1(GETMES(EXEC_ISTR)),
  745.                                    Child, SText(IdHardware (IDHW_EXECVER, NULL)),
  746.                                    Child, Label1(GETMES(WB_ISTR)),
  747.                                    Child, SText(IdHardware (IDHW_WBVER, NULL)),
  748.                                    Child, Label1(GETMES(CHSET_ISTR)),
  749.                                    Child, SText(IdHardware (IDHW_CHIPSET, NULL)),
  750.                                    Child, Label1(GETMES(GFX_ISTR)),
  751.                                    Child, SText(IdHardware (IDHW_GFXSYS, NULL)),
  752.                                    Child, Label1(GETMES(CHIP_ISTR)),
  753.                                    Child, SText(IdHardware (IDHW_CHIPRAM, NULL)),
  754.                                    Child, Label1(GETMES(FAST_ISTR)),
  755.                                    Child, SText(IdHardware (IDHW_FASTRAM, NULL)),
  756.                                    Child, VSpace(0), Child, VSpace(0),
  757.                                    End,
  758.                             Child, HGroup, MUIA_Group_SameSize, TRUE,
  759.                                    Child, Work2But = KeyButton (GETMES(WORK_BUT),    GETKEY(WORK_KEY)),
  760.                                    Child, ProgBut  = KeyButton (GETMES(PROGRAM_BUT), GETKEY(PROGRAM_KEY)),
  761.                                    Child, Quit2But = KeyButton (GETMES(EXIT_BUT),    GETKEY(EXIT_KEY)),
  762.                                    End,
  763.                             End,
  764.                      Child, VGroup,
  765.                             Child, HGroup,
  766.                                    Child, VGroup,
  767.                                           GroupFrameT(GETMES(PATLIST_TITLE)),
  768.                                           Child, PatLView = ListviewObject,
  769.                                                  MUIA_Listview_List, PatList = ListObject,
  770.                                                       InputListFrame,
  771.                                                       MUIA_List_AutoVisible, TRUE,
  772.                                                       End,
  773.                                                  End,
  774.                                           Child, HGroup, MUIA_Group_SameSize, TRUE,
  775.                                                  Child, AddBut  = KeyButton (GETMES(ADD_BUT),  GETKEY(ADD_KEY)),
  776.                                                  Child, DelBut  = KeyButton (GETMES(DEL_BUT),  GETKEY(DEL_KEY)),
  777.                                                  Child, UpBut   = KeyButton (GETMES(UP_BUT),   GETKEY(UP_KEY)),
  778.                                                  Child, DownBut = KeyButton (GETMES(DOWN_BUT), GETKEY(DOWN_KEY)),
  779.                                                  End,
  780.                                           End,
  781.                                    Child, Editor = VGroup,
  782.                                           GroupFrameT(GETMES(EDITOR_TITLE)),
  783.                                           Child, ColGroup(3),
  784.                                                  Child, KeyLabel1(GETMES(PATTERN_STR_STR), GETKEY(PATTERN_STR_KEY)),
  785.                                                  Child, Pattern = KeyString(empty, FMSIZE, GETKEY(PATTERN_STR_KEY)),
  786.                                                  Child, PatPop = PopButton (MUII_PopFile),
  787.                                                  Child, KeyLabel1(GETMES(STORAGE_STR_STR), GETKEY(STORAGE_STR_KEY)),
  788.                                                  Child, Storage = KeyString(empty, FMSIZE, GETKEY(STORAGE_STR_KEY)),
  789.                                                  Child, StoPop = PopButton (MUII_PopDrawer),
  790.                                                  End,
  791.                                           Child, VSpace(0),
  792.                                           Child, ColGroup(2),
  793.                                                  Child, KeyLabel1(GETMES(FUNCTION_STR), GETKEY(FUNCTION_KEY)),
  794.                                                  Child, Function = KeyCycle(FunctionName, GETKEY(FUNCTION_KEY)),
  795.                                                  Child, KeyLabel1(GETMES(PATTERN_MODE_STR), GETKEY(PATTERN_MODE_KEY)),
  796.                                                  Child, PatMode = KeyCycle(PatternMode, GETKEY(PATTERN_MODE_KEY)),
  797.                                                  Child, KeyLabel1(GETMES(STORAGE_MODE_STR), GETKEY(STORAGE_MODE_KEY)),
  798.                                                  Child, StoMode = KeyCycle(StorageMode, GETKEY(STORAGE_MODE_KEY)),
  799.                                                  Child, KeyLabel1(GETMES(STORAGE_METHOD_STR), GETKEY(STORAGE_METHOD_KEY)),
  800.                                                  Child, StoMethod = KeyCycle(StorageMethod, GETKEY(STORAGE_METHOD_KEY)),
  801.                                                  Child, KeyLabel1(GETMES(PERFORM_CHECK_STR), GETKEY(PERFORM_CHECK_KEY)),
  802.                                                  Child, PCheck = KeyCycle(PerformCheck, GETKEY(PERFORM_CHECK_KEY)),
  803.                                                  Child, KeyLabel1(GETMES(USE_XPK_STR), GETKEY(USE_XPK_KEY)),
  804.                                                  Child, HGroup,
  805.                                                         Child, XpkUse  = KeyCheckMark(FALSE, GETKEY(USE_XPK_KEY)),
  806.                                                         Child, XpkName = TextObject, TextFrame,
  807.                                                                End,
  808.                                                         Child, XpkPop = PopButton (MUII_PopUp),
  809.                                                         End,
  810.                                                  End,
  811.                                           Child, VSpace(0),
  812.                                           Child, HGroup, MUIA_Group_SameSize, TRUE,
  813.                                                  Child, AcceptBut = KeyButton (GETMES(ACCEPT_BUT), GETKEY(ACCEPT_KEY)),
  814.                                                  Child, CancelBut = KeyButton (GETMES(CANCEL_BUT), GETKEY(CANCEL_KEY)),
  815.                                                  End,
  816.                                           End,
  817.                                    End,
  818.                             Child, HGroup, MUIA_Group_SameSize, TRUE,
  819.                                    Child, SaveBut = KeyButton (GETMES(SAVE_BUT), GETKEY(SAVE_KEY)),
  820.                                    Child, UseBut  = KeyButton (GETMES(USE_BUT),  GETKEY(USE_KEY)),
  821.                                    Child, ExitBut = KeyButton (GETMES(EXIT_BUT), GETKEY(EXIT_KEY)),
  822.                                    End,
  823.                             End,
  824.                      End,
  825.               End,
  826.         TAG_DONE);
  827.  
  828.   if (! obj)
  829.     {
  830.       MakeRequest (REQ_TITLE_ERROR, WINDOW_PROBLEM, EXIT_BUT, NULL);
  831.       return (GAME_OVER);
  832.     }
  833.  
  834. // filling main window data structure
  835.   data = INST_DATA(cl, obj);
  836.   data->PatLView  = PatLView;  data->PatList = PatList;
  837.   data->Editor    = Editor;    data->Page    = Page;
  838.   data->Pattern   = Pattern;   data->Storage = Storage;
  839.   data->Function  = Function;
  840.   data->PatMode   = PatMode;   data->StoMode = StoMode;
  841.   data->StoMethod = StoMethod; data->PCheck  = PCheck;
  842.   data->XpkUse    = XpkUse;    data->XpkName = XpkName;
  843.  
  844.   data->PNode = NULL;
  845.   strcpy (data->CurFile, DEF_SETS_FILE);
  846.   strcpy (data->CurDir,  DEF_ENVARC_DIR);
  847.  
  848. // Activate keyboard control
  849.   DoMethod (obj, MUIM_MultiSet, MUIA_CycleChain, TRUE, ProgInfo, Work1But, Work2But, SystemBut, ProgBut, Quit1But, Quit2But, PatLView, AddBut, DelBut, UpBut, DelBut, Pattern, PatPop, Storage, StoPop, Function, PatMode, StoMode, StoMethod, PCheck, XpkUse, XpkPop, AcceptBut, CancelBut, SaveBut, UseBut, ExitBut, NULL);
  850.  
  851. // Set methods for interface changes
  852.  
  853. // close with window gadget
  854.   DoMethod (obj, MUIM_Notify,           MUIA_Window_CloseRequest, TRUE,
  855.                                         obj, 1,
  856.                                         MUIM_MW_Close);
  857. // close with exit buttons
  858.   DoMethod (ExitBut, MUIM_Notify,       MUIA_Pressed, FALSE,
  859.                                         obj, 1,
  860.                                         MUIM_MW_Close);
  861.   DoMethod (Quit1But, MUIM_Notify,      MUIA_Pressed, FALSE,
  862.                                         obj, 1,
  863.                                         MUIM_MW_Close);
  864.   DoMethod (Quit2But, MUIM_Notify,      MUIA_Pressed, FALSE,
  865.                                         obj, 1,
  866.                                         MUIM_MW_Close);
  867. // close with menu
  868.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, QUIT_MENU),
  869.                                         MUIM_Notify,
  870.                                         MUIA_Menuitem_Trigger,
  871.                                         MUIV_EveryTime,
  872.                                         obj, 1,
  873.                                         MUIM_MW_Close);
  874. // iconify with menu
  875.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, HIDE_MENU),
  876.                                         MUIM_Notify,
  877.                                         MUIA_Menuitem_Trigger,
  878.                                         MUIV_EveryTime,
  879.                                         MUIV_Notify_Application, 3,
  880.                                         MUIM_Set, MUIA_Application_Iconified, TRUE);
  881. // open XPK window with pop button
  882.   DoMethod (XpkPop, MUIM_Notify,        MUIA_Pressed, FALSE,
  883.                                         obj, 1,
  884.                                         MUIM_MW_XpkOpen);
  885. // on/off check mark "XPK usage"
  886.   DoMethod (XpkUse, MUIM_Notify,        MUIA_Selected,
  887.                                         MUIV_EveryTime,
  888.                                         obj, 2,
  889.                                         MUIM_MW_XpkUse,
  890.                                         MUIV_TriggerValue);
  891. // select pattern in the list
  892.   DoMethod (PatList, MUIM_Notify,       MUIA_List_Active,
  893.                                         MUIV_EveryTime,
  894.                                         obj, 1,
  895.                                         MUIM_MW_ListSelect);
  896. // add new pattern into the list
  897.   DoMethod (AddBut, MUIM_Notify,        MUIA_Pressed, FALSE,
  898.                                         obj, 1,
  899.                                         MUIM_MW_NewPattern);
  900. // delete patten in the list
  901.   DoMethod (DelBut, MUIM_Notify,        MUIA_Pressed, FALSE,
  902.                                         obj, 1,
  903.                                         MUIM_MW_DelPattern);
  904. // button "Cancel" of Editor
  905.   DoMethod (CancelBut, MUIM_Notify,     MUIA_Pressed, FALSE,
  906.                                         obj, 1,
  907.                                         MUIM_MW_ListSelect);
  908. // button "Accept" of Editor
  909.   DoMethod (AcceptBut, MUIM_Notify,     MUIA_Pressed, FALSE,
  910.                                         obj, 1,
  911.                                         MUIM_MW_Accept);
  912. // moving pattern up trough the list
  913.   DoMethod (UpBut, MUIM_Notify,         MUIA_Pressed, FALSE,
  914.                                         obj, 2,
  915.                                         MUIM_MW_ListEx, TRUE);
  916. // moving pattern down trough the list
  917.   DoMethod (DownBut, MUIM_Notify,       MUIA_Pressed, FALSE,
  918.                                         obj, 2,
  919.                                         MUIM_MW_ListEx, FALSE);
  920. // go to edit Storage after Pattern
  921.   DoMethod (Pattern, MUIM_Notify,       MUIA_String_Acknowledge,
  922.                                         MUIV_EveryTime,
  923.                                         obj, 3, MUIM_Set,
  924.                                         MUIA_Window_ActiveObject, Storage);
  925. // go to Edit Function after Storage
  926.   DoMethod (Storage, MUIM_Notify,       MUIA_String_Acknowledge,
  927.                                         MUIV_EveryTime,
  928.                                         obj, 3, MUIM_Set,
  929.                                         MUIA_Window_ActiveObject, Function);
  930. // menu "About MUI"
  931.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData,MUI_ABOUT_MENU),
  932.                                         MUIM_Notify,
  933.                                         MUIA_Menuitem_Trigger,
  934.                                         MUIV_EveryTime,
  935.                                         MUIV_Notify_Application, 2,
  936.                                         MUIM_Application_AboutMUI, obj);
  937. // menu "MUI settings"
  938.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData,MUI_PREFS_MENU),
  939.                                         MUIM_Notify,
  940.                                         MUIA_Menuitem_Trigger,
  941.                                         MUIV_EveryTime,
  942.                                         MUIV_Notify_Application, 2,
  943.                                         MUIM_Application_OpenConfigWindow, 0L);
  944. // menu "About Program"
  945.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, PROGRAM_MENU),
  946.                                         MUIM_Notify,
  947.                                         MUIA_Menuitem_Trigger,
  948.                                         MUIV_EveryTime,
  949.                                         obj, 2,
  950.                                         MUIM_MW_Page, ABOUT_PROG_PAGE);
  951. // menu "About System"
  952.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, SYSTEM_MENU),
  953.                                         MUIM_Notify,
  954.                                         MUIA_Menuitem_Trigger,
  955.                                         MUIV_EveryTime,
  956.                                         obj, 2,
  957.                                         MUIM_MW_Page, ABOUT_SYSTEM_PAGE);
  958. // load settings from menu
  959.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, OPEN_MENU),
  960.                                         MUIM_Notify,
  961.                                         MUIA_Menuitem_Trigger,
  962.                                         MUIV_EveryTime,
  963.                                         obj, 2,
  964.                                         MUIM_MW_MenuOpen, TRUE);
  965. // load default settings from menu
  966.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, LOAD_DEF_MENU),
  967.                                         MUIM_Notify,
  968.                                         MUIA_Menuitem_Trigger,
  969.                                         MUIV_EveryTime,
  970.                                         obj, 2,
  971.                                         MUIM_MW_MenuOpen, FALSE);
  972. // save settings from menu
  973.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, SAVE_MENU),
  974.                                         MUIM_Notify,
  975.                                         MUIA_Menuitem_Trigger,
  976.                                         MUIV_EveryTime,
  977.                                         obj, 2,
  978.                                         MUIM_MW_MenuSave, SAVE_SETS_CUR);
  979. // save settings from menu as default
  980.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, SAVE_DEF_MENU),
  981.                                         MUIM_Notify,
  982.                                         MUIA_Menuitem_Trigger,
  983.                                         MUIV_EveryTime,
  984.                                         obj, 2,
  985.                                         MUIM_MW_MenuSave, SAVE_SETS_DEF);
  986. // save settings from menu with requester
  987.   DoMethod ((Object *)DoMethod (Menu,   MUIM_FindUData, SAVE_AS_MENU),
  988.                                         MUIM_Notify,
  989.                                         MUIA_Menuitem_Trigger,
  990.                                         MUIV_EveryTime,
  991.                                         obj, 2,
  992.                                         MUIM_MW_MenuSave, SAVE_SETS_REQ);
  993. // button "Save"
  994.   DoMethod (SaveBut, MUIM_Notify,       MUIA_Pressed, FALSE,
  995.                                         obj, 2,
  996.                                         MUIM_MW_NewEnv, TRUE);
  997. // button "Use"
  998.   DoMethod (UseBut, MUIM_Notify,        MUIA_Pressed, FALSE,
  999.                                         obj, 2,
  1000.                                         MUIM_MW_NewEnv, FALSE);
  1001. // pop button of Pattern
  1002.   DoMethod (PatPop, MUIM_Notify,        MUIA_Pressed, FALSE,
  1003.                                         obj, 1,
  1004.                                         MUIM_MW_PatReq);
  1005. // pop Button of Storage
  1006.   DoMethod (StoPop, MUIM_Notify,        MUIA_Pressed, FALSE,
  1007.                                         obj, 1,
  1008.                                         MUIM_MW_StoReq);
  1009. // buttons "Let me work"
  1010.   DoMethod (Work1But, MUIM_Notify,      MUIA_Pressed, FALSE,
  1011.                                         obj, 2,
  1012.                                         MUIM_MW_Page, EDITOR_PAGE);
  1013.   DoMethod (Work2But, MUIM_Notify,      MUIA_Pressed, FALSE,
  1014.                                         obj, 2,
  1015.                                         MUIM_MW_Page, EDITOR_PAGE);
  1016. // button "About Program"
  1017.   DoMethod (ProgBut, MUIM_Notify,       MUIA_Pressed, FALSE,
  1018.                                         obj, 2,
  1019.                                         MUIM_MW_Page, ABOUT_PROG_PAGE);
  1020. // button "About System"
  1021.   DoMethod (SystemBut, MUIM_Notify,     MUIA_Pressed, FALSE,
  1022.                                         obj, 2,
  1023.                                         MUIM_MW_Page, ABOUT_SYSTEM_PAGE);
  1024.   return ((ULONG)obj);
  1025. }
  1026.  
  1027. /*                             ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  1028. ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¥ MainWinDispatcher() ª¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  1029. ¢                              ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´                      ¢
  1030. ¢                           Dispatcher of object MainWin.                   ¢
  1031. ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  1032. */
  1033. ULONG __saveds __asm MainWinDispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg)
  1034. {
  1035.   switch (msg->MethodID)
  1036.     {
  1037.       case OM_NEW             : return (MainWinNew        (cl, obj, (APTR)msg));
  1038.       case MUIM_MW_Open       : return (MainWinOpen       (cl, obj, (APTR)msg));
  1039.       case MUIM_MW_Close      : return (MainWinClose      (cl, obj, (APTR)msg));
  1040.       case MUIM_MW_XpkUse     : return (MainWinXpkUse     (cl, obj, (APTR)msg));
  1041.       case MUIM_MW_XpkOpen    : return (MainWinXpkOpen    (cl, obj, (APTR)msg));
  1042.       case MUIM_MW_XpkClose   : return (MainWinXpkClose   (cl, obj, (APTR)msg));
  1043.       case MUIM_MW_ListSelect : return (MainWinListSelect (cl, obj, (APTR)msg));
  1044.       case MUIM_MW_NewPattern : return (MainWinNewPattern (cl, obj, (APTR)msg));
  1045.       case MUIM_MW_DelPattern : return (MainWinDelPattern (cl, obj, (APTR)msg));
  1046.       case MUIM_MW_Accept     : return (MainWinAccept     (cl, obj, (APTR)msg));
  1047.       case MUIM_MW_ListEx     : return (MainWinListEx     (cl, obj, (APTR)msg));
  1048.       case MUIM_MW_Page       : return (MainWinPage       (cl, obj, (APTR)msg));
  1049.       case MUIM_MW_MenuOpen   : return (MainWinMenuOpen   (cl, obj, (APTR)msg));
  1050.       case MUIM_MW_MenuSave   : return (MainWinMenuSave   (cl, obj, (APTR)msg));
  1051.       case MUIM_MW_NewEnv     : return (MainWinNewEnv     (cl, obj, (APTR)msg));
  1052.       case MUIM_MW_PatReq     : return (MainWinPatReq     (cl, obj, (APTR)msg));
  1053.       case MUIM_MW_StoReq     : return (MainWinStoReq     (cl, obj, (APTR)msg));
  1054.     }
  1055.   return (DoSuperMethodA (cl, obj, msg));
  1056. }
  1057.